অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) একটি অত্যন্ত শক্তিশালী লাইব্রেরি যা Java প্রোগ্রামিং ভাষায় উন্নত ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস সরবরাহ করে। এটি Java স্ট্যান্ডার্ড কালেকশন API এর বাইরের কিছু অতিরিক্ত ডেটা স্ট্রাকচার এবং ইউটিলিটি ফাংশন প্রদান করে যা ডেটা ম্যানিপুলেশন এবং সংগ্রহ করার প্রক্রিয়াকে আরও সহজ করে তোলে। এই লাইব্রেরির মধ্যে কিছু গুরুত্বপূর্ণ বেসিক ক্লাস রয়েছে, যা ডেভেলপারদের বিভিন্ন পরিস্থিতিতে কার্যকরী ডেটা স্ট্রাকচার ব্যবহার করতে সহায়তা করে।
এখানে আমরা Commons Collections এর বেসিক ক্লাস সম্পর্কে আলোচনা করব, যেমন Bag, BidiMap, MultiMap, Deque, এবং আরো।
১. Bag (ব্যাগ)
Bag একটি ডেটা স্ট্রাকচার যা একটি নির্দিষ্ট আইটেমের উপস্থিতি গণনা করে, অর্থাৎ একটি আইটেম কতবার উপস্থিত (frequency) আছে তা ট্র্যাক করে। এটি মূলত Map এর মতো কাজ করে, তবে এখানে মান (value) হিসেবে গণনা (count) থাকে।
Bag সাধারণত এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে একটি আইটেমের উপস্থিতি বারবার আসতে পারে এবং আমাদের সেই উপস্থিতি ট্র্যাক করতে হবে।
উদাহরণ: Bag ব্যবহার
import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;
public class BagExample {
public static void main(String[] args) {
Bag<String> bag = new HashBag<>();
// Add items to the bag
bag.add("apple");
bag.add("banana");
bag.add("apple");
// Get the count of an item
System.out.println("Count of apple: " + bag.getCount("apple")); // Output: 2
System.out.println("Count of banana: " + bag.getCount("banana")); // Output: 1
}
}
এখানে:
HashBagএকটিBagইমপ্লিমেন্টেশন যা আইটেমের সংখ্যা ট্র্যাক করে।getCount("apple")দিয়েappleএর উপস্থিতির সংখ্যা পাওয়া যাচ্ছে।
২. BidiMap (বিডি ম্যাপ)
BidiMap হল একটি বিশেষ ধরনের ম্যাপ, যা দুটি দিক থেকে কাজ করে। এটি সাধারণ Map এর মতো কাজ করে, তবে এতে আপনি একটি কী থেকে মান (value) এবং মান থেকে কী (key) উভয় দিক থেকে অ্যাক্সেস করতে পারেন। সাধারণত Map শুধুমাত্র কী থেকে মান বের করতে সক্ষম, কিন্তু BidiMap উভয় দিক থেকে অ্যাক্সেস করার সুযোগ দেয়।
উদাহরণ: BidiMap ব্যবহার
import org.apache.commons.collections4.BidiMap;
import org.apache.commons.collections4.map.HashBidiMap;
public class BidiMapExample {
public static void main(String[] args) {
BidiMap<String, String> bidiMap = new HashBidiMap<>();
// Put key-value pairs into the BidiMap
bidiMap.put("one", "1");
bidiMap.put("two", "2");
// Get value by key
System.out.println(bidiMap.get("one")); // Output: 1
// Get key by value
System.out.println(bidiMap.getKey("2")); // Output: two
}
}
এখানে:
HashBidiMapহলো একটি ইমপ্লিমেন্টেশন যা কী এবং মান উভয় দিক থেকে অ্যাক্সেস করার সুবিধা দেয়।getKey("2")এর মাধ্যমে আপনি মান থেকে কী বের করতে পারেন।
৩. MultiMap (মাল্টি ম্যাপ)
MultiMap হল একটি ম্যাপ যা একটি কী এর সাথে একাধিক মান সংরক্ষণ করতে সক্ষম। সাধারণ Map একটি কী এর সাথে একমাত্র মান রাখে, কিন্তু MultiMap একই কী এর সাথে একাধিক মান সংরক্ষণ করতে পারে। এটি সাধারণত সেই পরিস্থিতিতে ব্যবহৃত হয় যেখানে একটি কী এর জন্য একাধিক মান থাকতে পারে, যেমন একটি ইউজার এর সাথে একাধিক অ্যাড্রেস থাকতে পারে।
উদাহরণ: MultiMap ব্যবহার
import org.apache.commons.collections4.MultiMap;
import org.apache.commons.collections4.map.MultiValueMap;
import org.apache.commons.collections4.map.HashedMap;
public class MultiMapExample {
public static void main(String[] args) {
MultiMap<String, String> multiMap = new MultiValueMap<>();
// Put multiple values under the same key
multiMap.put("fruit", "apple");
multiMap.put("fruit", "banana");
multiMap.put("vegetable", "carrot");
// Get all values for a key
System.out.println(multiMap.get("fruit")); // Output: [apple, banana]
}
}
এখানে:
MultiValueMapএকটি ইমপ্লিমেন্টেশন যা একই কী এর সাথে একাধিক মান যোগ করতে সাহায্য করে।multiMap.get("fruit")দ্বারাfruitকী এর সাথে সম্পর্কিত সমস্ত মান পাওয়া যাবে।
৪. Deque (ডাবল-এন্ডেড কিউ)
Deque (Double Ended Queue) একটি কিউ (Queue) যা আইটেম ইনসার্ট এবং রিমুভ করার জন্য উভয় প্রান্তে কাজ করে। এটি Queue এর চেয়েও শক্তিশালী, কারণ আপনি কিউ এর উভয় প্রান্ত থেকে আইটেম বের করতে এবং যুক্ত করতে পারবেন।
উদাহরণ: Deque ব্যবহার
import org.apache.commons.collections4.Queue;
import org.apache.commons.collections4.queue.CircularFifoQueue;
public class DequeExample {
public static void main(String[] args) {
Deque<String> deque = new CircularFifoQueue<>(5);
// Add items to the deque
deque.add("apple");
deque.add("banana");
deque.add("cherry");
// Print deque
System.out.println(deque); // Output: [apple, banana, cherry]
// Remove items from the front
deque.removeFirst();
System.out.println(deque); // Output: [banana, cherry]
}
}
এখানে:
CircularFifoQueueএকটি ডাবল-এন্ডেড কিউ ইমপ্লিমেন্টেশন যা FIFO (First-In-First-Out) নীতি অনুসরণ করে।removeFirst()দিয়ে কিউয়ের প্রথম আইটেম সরানো হয়েছে।
৫. Iterator Utilities (ইটারেটর ইউটিলিটি)
আইটেমগুলির উপর কাজ করতে Iterator একটি গুরুত্বপূর্ণ ফাংশনালিটি। কমন্স কালেকশনস লাইব্রেরি Iterator Utilities সরবরাহ করে যা ইটারেটর ব্যবহার করে দ্রুত ফিল্টারিং এবং কার্যকরী ম্যানিপুলেশন করতে সাহায্য করে।
উদাহরণ: forEach ব্যবহার
import org.apache.commons.collections4.IteratorUtils;
import java.util.List;
import java.util.Arrays;
public class IteratorExample {
public static void main(String[] args) {
List<String> list = Arrays.asList("apple", "banana", "cherry");
// Using forEach from IteratorUtils
IteratorUtils.forEach(list.iterator(), System.out::println);
}
}
এখানে:
IteratorUtils.forEachব্যবহার করে তালিকার সকল আইটেমের উপর অ্যাকশন প্রয়োগ করা হয়েছে (এখানে প্রিন্ট করা হয়েছে)।
সারাংশ
অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরি Java ডেভেলপারদের জন্য একটি শক্তিশালী টুল যা বিভিন্ন উন্নত ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস সরবরাহ করে। এর মধ্যে Bag, BidiMap, MultiMap, Deque, এবং Iterator Utilities প্রভৃতি কার্যকরী ক্লাস অন্তর্ভুক্ত রয়েছে, যা Java স্ট্যান্ডার্ড কালেকশন API এর বাইরে অতিরিক্ত কার্যক্ষমতা সরবরাহ করে। এই ক্লাসগুলির মাধ্যমে আপনি আরও সহজভাবে ডেটা ম্যানিপুলেশন এবং কালেকশন ম্যানেজমেন্ট করতে পারেন, যা প্রোজেক্টের কার্যক্ষমতা এবং উন্নয়ন প্রক্রিয়াকে দ্রুত এবং সুশৃঙ্খল করে তোলে।
Apache Commons Collections লাইব্রেরির মধ্যে CollectionUtils একটি গুরুত্বপূর্ণ ইউটিলিটি ক্লাস যা বিভিন্ন ধরনের Collection (যেমন: List, Set, Map ইত্যাদি) এবং ডেটা স্ট্রাকচার সম্পর্কিত কার্যাবলী সরবরাহ করে। CollectionUtils Java Collections Framework এর উপর অতিরিক্ত সুবিধা এবং ফাংশনালিটি যোগ করে, যা কোলেকশনগুলির ম্যানিপুলেশন আরও সহজ এবং কার্যকরী করে তোলে।
CollectionUtils বিভিন্ন সাধারণ এবং জটিল কাজ যেমন, কোলেকশন ম্যানিপুলেশন, ফিল্টারিং, মার্জিং, চেকিং, আইটেম অপসারণ, শূন্য চেকিং ইত্যাদি সহজেই সম্পাদন করতে সহায়তা করে। এটি Java Collections Framework এর সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ এবং List, Set, Map ইত্যাদি কোলেকশন টাইপে কাজ করতে পারে।
১. CollectionUtils ক্লাসের বৈশিষ্ট্য
CollectionUtils-এ অনেক ধরনের ইউটিলিটি মেথড রয়েছে, যার মাধ্যমে আপনি সহজে কোলেকশনগুলির সাথে কাজ করতে পারেন। কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য নিচে আলোচনা করা হলো:
১.১ কোলেকশন চেকিং (Collection Checking)
CollectionUtils কোলেকশন সম্পর্কিত বিভিন্ন চেকিং ফাংশন প্রদান করে, যেমন কোলেকশনটি শূন্য (null) বা খালি কিনা পরীক্ষা করা, অথবা কোলেকশনে কোনও উপাদান রয়েছে কিনা।
isEmpty(): কোলেকশনটি শূন্য কিনা তা চেক করে।isNotEmpty(): কোলেকশনটি খালি নয়, তা চেক করে।size(): কোলেকশনের আকার (size) প্রদান করে।
উদাহরণ: CollectionUtils.isEmpty() ব্যবহারের
import org.apache.commons.collections4.CollectionUtils;
import java.util.List;
import java.util.ArrayList;
public class CollectionUtilsExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
if (CollectionUtils.isEmpty(list)) {
System.out.println("List is empty.");
} else {
System.out.println("List is not empty.");
}
}
}
এখানে:
CollectionUtils.isEmpty()চেক করে যে list খালি নয়।
১.২ কোলেকশন ম্যানিপুলেশন (Collection Manipulation)
CollectionUtils কোলেকশনের উপাদান যোগ করা, মুছে ফেলা এবং কোলেকশনগুলির মধ্যে অপারেশন পরিচালনা করতে সাহায্য করে।
addAll(): একটি কোলেকশনে অন্যান্য কোলেকশনের উপাদান যোগ করতে ব্যবহৃত হয়।removeAll(): একাধিক উপাদান সরাতে ব্যবহৃত হয়।
উদাহরণ: CollectionUtils.addAll() এবং CollectionUtils.removeAll() ব্যবহারের
import org.apache.commons.collections4.CollectionUtils;
import java.util.List;
import java.util.ArrayList;
public class CollectionUtilsExample {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("apple");
list1.add("banana");
List<String> list2 = new ArrayList<>();
list2.add("orange");
list2.add("grape");
// Add all elements from list2 to list1
CollectionUtils.addAll(list1, list2.toArray());
// Remove all elements of list2 from list1
CollectionUtils.removeAll(list1, list2);
System.out.println("list1 after manipulation: " + list1);
}
}
এখানে:
CollectionUtils.addAll()ব্যবহৃত হয়েছে একটি কোলেকশন থেকে অন্য কোলেকশনে সব উপাদান যোগ করার জন্য।CollectionUtils.removeAll()ব্যবহৃত হয়েছে একটি কোলেকশন থেকে অন্য কোলেকশনের সব উপাদান মুছে ফেলার জন্য।
১.৩ কোলেকশন ফিল্টারিং (Collection Filtering)
CollectionUtils ফিল্টারিং অপারেশন পরিচালনা করতে সহায়তা করে, যেমন নির্দিষ্ট শর্ত পূরণকারী উপাদানগুলি কোলেকশন থেকে বের করা।
select(): শর্তসাপেক্ষে উপাদান নির্বাচন করা।reject(): শর্তসাপেক্ষে উপাদান বাতিল করা।
উদাহরণ: CollectionUtils.select() এবং CollectionUtils.reject() ব্যবহারের
import org.apache.commons.collections4.CollectionUtils;
import java.util.List;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionUtilsExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
list.add("grape");
// Select items starting with "b"
Collection<String> selected = CollectionUtils.select(list, s -> s.startsWith("b"));
System.out.println("Selected items: " + selected);
// Reject items starting with "b"
Collection<String> rejected = CollectionUtils.reject(list, s -> s.startsWith("b"));
System.out.println("Rejected items: " + rejected);
}
}
এখানে:
select()ব্যবহার করা হয়েছে "b" দিয়ে শুরু হওয়া উপাদানগুলো নির্বাচন করতে।reject()ব্যবহার করা হয়েছে "b" দিয়ে শুরু না হওয়া উপাদানগুলো বাতিল করতে।
১.৪ কোলেকশন মার্জিং (Collection Merging)
CollectionUtils কোলেকশনের মধ্যে মার্জিং (একত্রিত) অপারেশন সহজে করতে সহায়তা করে।
union(): দুটি কোলেকশন একত্রিত করে একটি নতুন কোলেকশন তৈরি করে।intersection(): দুটি কোলেকশনের সাধারণ উপাদানগুলো বের করে।
উদাহরণ: CollectionUtils.union() এবং CollectionUtils.intersection() ব্যবহারের
import org.apache.commons.collections4.CollectionUtils;
import java.util.List;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionUtilsExample {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("apple");
list1.add("banana");
List<String> list2 = new ArrayList<>();
list2.add("banana");
list2.add("cherry");
// Union of two lists
Collection<String> union = CollectionUtils.union(list1, list2);
System.out.println("Union: " + union);
// Intersection of two lists
Collection<String> intersection = CollectionUtils.intersection(list1, list2);
System.out.println("Intersection: " + intersection);
}
}
এখানে:
union()ব্যবহৃত হয়েছে দুটি কোলেকশন একত্রিত করতে।intersection()ব্যবহৃত হয়েছে দুটি কোলেকশনের সাধারণ উপাদান খুঁজে বের করতে।
২. CollectionUtils এর অন্যান্য ফাংশন
CollectionUtils আরও অনেক শক্তিশালী ফাংশন প্রদান করে যা কোলেকশন অপারেশন সহজ এবং দ্রুত করতে সাহায্য করে, যেমন:
emptyCollection(): একটি খালি কোলেকশন তৈরি করতে ব্যবহৃত হয়।addIgnoreNull(): নাল (null) চেক করার পর একটি কোলেকশনে উপাদান যোগ করে।filter(): একটি শর্ত অনুযায়ী কোলেকশনের উপাদান ফিল্টার করতে ব্যবহৃত হয়।
৩. CollectionUtils কিভাবে Maven দিয়ে ব্যবহার করবেন
আপনি যদি Maven ব্যবহার করে থাকেন, তাহলে Apache Commons Collections লাইব্রেরিটি আপনার প্রোজেক্টে যোগ করার জন্য আপনাকে pom.xml ফাইলে নিচের ডিপেনডেন্সি যোগ করতে হবে:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
এটি আপনার প্রোজেক্টে Apache Commons Collections লাইব্রেরি যোগ করবে, যার মাধ্যমে আপনি CollectionUtils সহ অন্যান্য কার্যকারিতা ব্যবহার করতে পারবেন।
সারাংশ
CollectionUtils Apache Commons Collections লাইব্রেরির একটি শক্তিশালী ক্লাস যা কোলেকশন সম্পর্কিত বিভিন্ন ইউটিলিটি ফাংশন সরবরাহ করে। এটি কোলেকশনগুলির মধ্যে সাধারণ অপারেশন যেমন যোগ, অপসারণ, ফিল্টারিং, মার্জিং এবং সাইজ চেকিং ইত্যাদি সহজ করে তোলে। Java Collections Framework এর সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ হওয়ায় এটি আপনার প্রোজেক্টে কোলেকশন ম্যানিপুলেশন কাজকে আরও সহজ এবং দ্রুত করে তোলে।
Apache Commons Collections লাইব্রেরি Java Collections Framework (JCF)-এর উপর ভিত্তি করে আরও উন্নত এবং কার্যকরী ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস সরবরাহ করে। IterableMap এবং MapUtils দুটি গুরুত্বপূর্ণ উপাদান যা Map সম্পর্কিত অপারেশন এবং কাস্টম ফিচার সরবরাহ করে।
১. IterableMap Interface
IterableMap হল Apache Commons Collections এর একটি ইন্টারফেস যা Map ইন্টারফেসের একটি এক্সটেনশন। এটি মূলত একটি Map যা Iterable ইন্টারফেসকে এক্সটেন্ড করে, যার মাধ্যমে আপনি একটি Map এর উপাদানগুলিকে সহজে for-each লুপের মাধ্যমে ইটারেট করতে পারেন।
IterableMap ইন্টারফেস Map এর সমস্ত কার্যকারিতা সরবরাহ করে, তবে এর মধ্যে একটি অতিরিক্ত সুবিধা হল এটি key-value pairs উপর ইটারেশন করতে সক্ষম।
IterableMap এর উদাহরণ
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.collections4.map.HashedMap;
import org.apache.commons.collections4.map.ListOrderedMap;
import org.apache.commons.collections4.IterableMap;
import java.util.Map;
public class IterableMapExample {
public static void main(String[] args) {
IterableMap<String, String> iterableMap = new ListOrderedMap<>();
iterableMap.put("apple", "fruit");
iterableMap.put("carrot", "vegetable");
iterableMap.put("banana", "fruit");
// Iterating through the map using for-each loop
for (Map.Entry<String, String> entry : iterableMap.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}
এখানে:
- IterableMap ব্যবহার করা হয়েছে, যা Map এর উপর Iterable সমর্থন প্রদান করে।
- entrySet() মেথড ব্যবহার করে for-each লুপে Map এর সকল উপাদান ইটারেট করা হচ্ছে।
আউটপুট:
apple : fruit
carrot : vegetable
banana : fruit
এটি Map এর উপাদানগুলির উপর সহজে ইটারেট করার জন্য একটি সহজ পদ্ধতি সরবরাহ করে, এবং IterableMap এর মাধ্যমে আপনি Map এ key-value pairs উপর for-each লুপ প্রয়োগ করতে পারেন।
২. MapUtils Class
MapUtils হল একটি ইউটিলিটি ক্লাস যা Map সম্পর্কিত বিভিন্ন সাধারণ কার্যাবলী সরবরাহ করে। এটি মূলত Map ডেটা স্ট্রাকচারের উপর কিছু সাধারণ কাজ সহজভাবে করার জন্য তৈরি হয়েছে। MapUtils মেথডগুলো null-safe এবং কার্যকরভাবে Map পরিচালনা করতে সাহায্য করে।
MapUtils এর প্রধান ফিচার:
- null-safe map operations: Map এর মধ্যে null চেকিং ছাড়া কাজ করার সুবিধা।
- Map modification: মান যোগ, মান পরিবর্তন, কপি করা ইত্যাদি কাজ।
- Get value with default: যদি মান পাওয়া না যায় তবে ডিফল্ট মান ফেরত দেয়।
- Map comparison: দুটি Map তুলনা করা।
উদাহরণ: MapUtils ব্যবহার করা
import org.apache.commons.collections4.MapUtils;
import java.util.HashMap;
import java.util.Map;
public class MapUtilsExample {
public static void main(String[] args) {
// Creating a Map using HashMap
Map<String, String> map = new HashMap<>();
map.put("apple", "fruit");
map.put("carrot", "vegetable");
// Using MapUtils to safely get a value with a default
String value = MapUtils.getString(map, "banana", "unknown");
System.out.println(value); // Output: unknown
// Using MapUtils to get a value with key existence check
boolean containsKey = MapUtils.isEmpty(map); // Checks if the map is empty
System.out.println(containsKey); // Output: false
// Using MapUtils to safely put a value
MapUtils.putIfAbsent(map, "banana", "fruit");
System.out.println(map); // Output: {apple=fruit, carrot=vegetable, banana=fruit}
}
}
এখানে:
- MapUtils.getString() মেথড ব্যবহার করা হয়েছে যাতে key না থাকলে একটি ডিফল্ট মান ফেরত দেয়।
- MapUtils.isEmpty() মেথডের মাধ্যমে Map খালি কি না তা চেক করা হয়েছে।
- MapUtils.putIfAbsent() মেথডটি নিরাপদভাবে একটি নতুন মান Map-এ যোগ করে যদি সেই কীগুলি আগে থেকে না থাকে।
আউটপুট:
unknown
false
{apple=fruit, carrot=vegetable, banana=fruit}
এটি দেখায় কিভাবে MapUtils ব্যবহার করে নিরাপদভাবে Map অপারেশন করা যায়, যা মান বের করার সময় null চেক করতে সাহায্য করে এবং সহজভাবে নতুন মান যোগ করতে সাহায্য করে।
৩. MapUtils এর অন্যান্য ফিচার
putAll(): একাধিক মান একত্রে একটি Map এ যোগ করা।
Map<String, String> newMap = new HashMap<>(); MapUtils.putAll(newMap, new Object[][] { { "one", "1" }, { "two", "2" } });getMap(): একটি Map এর থেকে মান বের করা।
Map<String, String> map = MapUtils.getMap(new HashMap<>(), "key", "defaultValue");isEmpty(): চেক করে যে Map ফাঁকা কিনা।
boolean isEmpty = MapUtils.isEmpty(map);isEqualMap(): দুটি Map এর সমান কিনা তা চেক করা।
boolean areEqual = MapUtils.isEqualMap(map1, map2);getString(): একটি Map থেকে স্ট্রিং টাইপের মান পেতে, যদি মান না থাকে তবে একটি ডিফল্ট মান ফেরত দেয়।
String value = MapUtils.getString(map, "key", "default");
সারাংশ
Apache Commons Collections লাইব্রেরির IterableMap এবং MapUtils ক্লাস Java Collections Framework এর সাথে অতিরিক্ত ফিচার এবং ইউটিলিটি সরবরাহ করে। IterableMap আপনাকে একটি Map এর উপাদানগুলোর উপর সহজে ইটারেট করার সুযোগ দেয় এবং MapUtils একটি ব্যবহারিক ক্লাস যা Map এর উপর কাজ করার জন্য বিভিন্ন সাধারণ এবং নিরাপদ ফিচার সরবরাহ করে। এটি null-safe অপারেশন, মান বের করা, মান যুক্ত করা এবং Map এর তুলনা করার সুবিধা প্রদান করে। Apache Commons Collections এর এই ফিচারগুলি ব্যবহার করে Map এর কার্যাবলী আরও সহজ, কার্যকরী এবং নিরাপদ করা যায়।
Apache Commons Collections লাইব্রেরিটি Java Collections Framework এর উপর ভিত্তি করে একাধিক অতিরিক্ত ডাটা স্ট্রাকচার এবং ইউটিলিটি প্রদান করে, যা সাধারণ কালেকশনগুলির উপর কার্যক্রম সহজতর করে। এর মধ্যে একটি শক্তিশালী ক্লাস হল IteratorUtils, যা Iterator এর সাথে কাজ করার জন্য একটি সেট অব ফাংশন প্রদান করে।
IteratorUtils ক্লাস ব্যবহার করে আপনি Java এর Iterator থেকে সহজে মান বের করতে, সংগ্রহ করতে, এবং অন্যান্য কার্যক্রম সম্পাদন করতে পারেন। এই ক্লাসটি Iterator এর সাথে সম্পর্কিত কার্যক্রমকে অনেক বেশি নমনীয় এবং কার্যকরী করে তোলে।
IteratorUtils Overview
IteratorUtils ক্লাসটি Apache Commons Collections এর একটি ইউটিলিটি ক্লাস, যা Iterator ব্যবহারের জন্য অনেক সহায়ক মেথড সরবরাহ করে। এই ক্লাসটির সাহায্যে আপনি একটি Iterator এর উপাদানকে বিভিন্ন পদ্ধতিতে প্রসেস করতে পারবেন, যেমন ইটেরেট করা, ফিল্টার করা, এবং ট্রান্সফর্ম করা।
IteratorUtils এর প্রধান ফিচারসমূহ:
- Iterator to Collection:
- আপনি একটি Iterator এর মাধ্যমে একটি Collection তৈরি করতে পারেন।
- Iterator Traversal:
- Iterator এর উপাদানগুলি ট্রাভার্স করা, যা সাধারণভাবে
while (iterator.hasNext())ব্যবহারের চেয়ে সহজ এবং সরল হয়।
- Iterator এর উপাদানগুলি ট্রাভার্স করা, যা সাধারণভাবে
- Iterator Transformation:
- Iterator এর উপাদানগুলিকে একটি নতুন ফরম্যাটে রূপান্তর করতে পারবেন।
- Iterator Filtering:
- Iterator এর উপাদানগুলির মধ্যে নির্দিষ্ট শর্তাবলী মেনে ফিল্টারিং করতে পারবেন।
IteratorUtils এর কিছু গুরুত্বপূর্ণ মেথড:
toList():
- এই মেথডটি একটি Iterator এর উপাদানগুলোকে একটি List-এ রূপান্তর করে দেয়।
Iterator<String> iterator = Arrays.asList("apple", "banana", "cherry").iterator(); List<String> list = IteratorUtils.toList(iterator); System.out.println(list); // Output: [apple, banana, cherry]toArray():
- এই মেথডটি Iterator থেকে উপাদান সংগ্রহ করে একটি Array তৈরি করে।
Iterator<Integer> iterator = Arrays.asList(1, 2, 3, 4).iterator(); Integer[] array = IteratorUtils.toArray(iterator, Integer.class); System.out.println(Arrays.toString(array)); // Output: [1, 2, 3, 4]filter():
- এই মেথডটি একটি Iterator থেকে উপাদান ফিল্টার করতে সাহায্য করে, যেখানে একটি Predicate ব্যবহার করা হয়।
Iterator<String> iterator = Arrays.asList("apple", "banana", "cherry").iterator(); Iterator<String> filteredIterator = IteratorUtils.filteredIterator(iterator, new Predicate<String>() { @Override public boolean evaluate(String item) { return item.startsWith("a"); // Only items starting with "a" } }); while (filteredIterator.hasNext()) { System.out.println(filteredIterator.next()); } // Output: appletransform():
- এই মেথডটি একটি Iterator এর উপাদানকে ট্রান্সফর্ম করে একটি নতুন Iterator তৈরি করতে ব্যবহৃত হয়।
Iterator<String> iterator = Arrays.asList("apple", "banana", "cherry").iterator(); Iterator<String> transformedIterator = IteratorUtils.transformedIterator(iterator, new Transformer<String, String>() { @Override public String transform(String input) { return input.toUpperCase(); // Convert each element to uppercase } }); while (transformedIterator.hasNext()) { System.out.println(transformedIterator.next()); } // Output: APPLE, BANANA, CHERRYemptyIterator():
- একটি খালি Iterator ফেরত দেয়। যখন আপনি এমন Iterator চান যা কোনো উপাদান ধারণ করে না, তখন এটি উপকারী হতে পারে।
Iterator<String> emptyIterator = IteratorUtils.emptyIterator(); System.out.println(emptyIterator.hasNext()); // Output: false
Collection Iteration Using IteratorUtils
IteratorUtils শুধুমাত্র Iterator ব্যবহারের জন্যই নয়, Collection Iteration এর জন্যও খুব কার্যকরী। এটি Collection এর উপাদানগুলির উপর সহজেই কার্যক্রম সম্পাদন করার জন্য Iterator তৈরি করতে সহায়তা করে, এবং এতে কোনো পদ্ধতি ব্যবহার করা ছাড়াও foreach বা for-each loop ব্যবহার করতে পারেন।
Collection Iteration Example:
List<String> fruits = Arrays.asList("apple", "banana", "cherry");
Iterator<String> iterator = fruits.iterator();
while (iterator.hasNext()) {
String fruit = iterator.next();
System.out.println(fruit);
}
// Output: apple, banana, cherry
এখানে, iterator.next() পদ্ধতির মাধ্যমে আমরা Collection এর সব উপাদান ভ্রমণ (traverse) করেছি।
Collection Iteration with Filtering and Transformation
IteratorUtils দিয়ে আপনি Collection এর উপাদানগুলিকে ফিল্টার করতে বা ট্রান্সফর্ম করতে পারেন, যাতে আপনি আপনার প্রয়োজনীয় ডাটা বের করতে পারেন।
Example of Filtering a Collection:
List<String> fruits = Arrays.asList("apple", "banana", "cherry", "avocado");
Iterator<String> iterator = IteratorUtils.filteredIterator(fruits.iterator(), new Predicate<String>() {
public boolean evaluate(String fruit) {
return fruit.startsWith("a");
}
});
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// Output: apple, avocado
এখানে:
IteratorUtils.filteredIteratorব্যবহার করে Collection এর উপাদানগুলির মধ্যে শুধু "a" দিয়ে শুরু হওয়া ফলগুলি ফিল্টার করা হয়েছে।
Example of Transformation:
List<String> fruits = Arrays.asList("apple", "banana", "cherry");
Iterator<String> transformedIterator = IteratorUtils.transformedIterator(fruits.iterator(), new Transformer<String, String>() {
public String transform(String fruit) {
return fruit.toUpperCase(); // Convert to uppercase
}
});
while (transformedIterator.hasNext()) {
System.out.println(transformedIterator.next());
}
// Output: APPLE, BANANA, CHERRY
এখানে:
IteratorUtils.transformedIteratorব্যবহার করে Collection এর উপাদানগুলিকে ট্রান্সফর্ম করে সমস্ত ফলের নাম বড় অক্ষরে রূপান্তরিত করা হয়েছে।
সারাংশ
Apache Commons Collections এর IteratorUtils ক্লাস ব্যবহার করে আপনি সহজে Iterator এর মাধ্যমে Collection এর উপাদানগুলির উপর কার্যক্রম সম্পাদন করতে পারেন। এটি Iterator এর উপাদানগুলি ফিল্টার করা, ট্রান্সফর্ম করা, এবং আইটেম সংগ্রহ করার মতো কার্যক্রম সহজ করে তোলে। এর মাধ্যমে Collection Iteration আরও সহজ এবং কার্যকরী হয়ে ওঠে। IteratorUtils কালেকশনগুলির উপাদানগুলির উপর আরো জটিল ফিল্টারিং, ট্রান্সফরমেশন এবং সংগ্রহ কার্যক্রম বাস্তবায়ন করতে সাহায্য করে, যা Java Collections Framework এর মৌলিক কার্যক্রমের তুলনায় আরও কার্যকর।
Apache Commons Collections Java ডেভেলপারদের জন্য একটি শক্তিশালী লাইব্রেরি, যা Java Collections Framework (JCF)-এর বাইরে কিছু অতিরিক্ত ফিচার এবং ডেটা স্ট্রাকচার সরবরাহ করে। এর মধ্যে একটি গুরুত্বপূর্ণ এবং কার্যকরী ডেটা স্ট্রাকচার হল Bag, যা সাধারণভাবে MultiSet হিসেবেও পরিচিত।
Bag:
Bag হল একটি ডেটা স্ট্রাকচার যা একাধিক মান (values) রাখতে পারে এবং একটি উপাদানকে একাধিকবার ধারণ করতে পারে। এটি একটি সাধারণ Set নয়, কারণ Set কেবল ইউনিক উপাদান ধারণ করে, কিন্তু Bag একই উপাদান একাধিকবার রাখতে সক্ষম।
Bag এর সবচেয়ে বড় বৈশিষ্ট্য হল এটি একটি উপাদান কতবার অন্তর্ভুক্ত হয়েছে তা ট্র্যাক করতে পারে। উদাহরণস্বরূপ, যদি আপনি একটি শপিং কার্টে একাধিক আইটেম যোগ করেন, তবে সেই আইটেমটির পুনরাবৃত্তি থাকবে এবং Bag এটিকে সঠিকভাবে ট্র্যাক করতে পারবে।
Bag এর বৈশিষ্ট্য:
- Duplicate Elements: Bag একটি ডেটা স্ট্রাকচার যা একই উপাদান একাধিকবার ধারণ করতে পারে। এটি Set এর থেকে আলাদা, যেহেতু Set-এ একই উপাদান শুধুমাত্র একবার থাকতে পারে।
- Frequency Counting: Bag প্রতি উপাদানের উপস্থিতির সংখ্যা (frequency) ট্র্যাক করে, অর্থাৎ প্রতিটি উপাদান কতবার রাখা হয়েছে, সেই তথ্যটি ধারণ করা হয়।
- No Ordering Guarantee: Bag সাধারণত Set এর মতো কোনো অর্ডার গ্যারান্টি দেয় না। আপনি যদি অর্ডার চাইতে চান, তবে আপনাকে বিশেষভাবে ListBag বা অন্য কোনো নির্দিষ্ট বাস্তবায়ন ব্যবহার করতে হবে।
- Efficient Counting: Bag উপাদানগুলির উপস্থিতি সংখ্যা (count) খুব দ্রুত এবং কার্যকরভাবে পরিচালনা করে।
Bag এর ব্যবহার:
Bag ব্যবহার করা খুবই সহজ, এবং এটি সাধারণত HashBag, TreeBag বা LinkedHashBag এর মতো বিভিন্ন বাস্তবায়নের মাধ্যমে আসে। নিচে একটি সাধারণ উদাহরণ দেওয়া হলো:
Example: Using Bag
import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;
public class BagExample {
public static void main(String[] args) {
// Create a Bag instance
Bag<String> bag = new HashBag<>();
// Add elements
bag.add("apple");
bag.add("banana");
bag.add("apple");
bag.add("orange");
// Print the Bag
System.out.println("Bag: " + bag);
// Get the count of an element
System.out.println("Count of apple: " + bag.getCount("apple"));
// Remove an element
bag.remove("apple");
System.out.println("Bag after removing apple: " + bag);
}
}
Output:
Bag: [apple, apple, banana, orange]
Count of apple: 2
Bag after removing apple: [banana, orange, apple]
ব্যাখ্যা:
HashBagএকটি সাধারণ Bag বাস্তবায়ন যা কোনো নির্দিষ্ট অর্ডার ছাড়াই উপাদানগুলিকে ধারণ করে।add()মেথডটি উপাদানগুলিকে Bag-এ যোগ করে।getCount()মেথডটি একটি উপাদান কতবার Bag-এ রয়েছে তা ফেরত দেয়।remove()মেথডটি নির্দিষ্ট উপাদানটি Bag থেকে মুছে ফেলে।
BagUtils:
BagUtils একটি ইউটিলিটি ক্লাস যা Bag টাইপের কালেকশনের জন্য বিভিন্ন সহায়ক মেথড সরবরাহ করে। এটি Bag এর উপর সাধারণ অপারেশন (যেমন, যোগ করা, বাদ দেওয়া, গণনা করা ইত্যাদি) করতে সহায়তা করে। BagUtils এর সাহায্যে আপনি আরও সহজে এবং কার্যকরভাবে Bag এর সাথে কাজ করতে পারেন।
Common Methods in BagUtils:
BagUtils.synchronizedBag():- এটি একটি থ্রেড-সেফ Bag তৈরি করে, যাতে একাধিক থ্রেড নিরাপদভাবে একসাথে কাজ করতে পারে।
Bag<String> synchronizedBag = BagUtils.synchronizedBag(new HashBag<>());BagUtils.addAll():- এটি একটি Bag-এ সমস্ত উপাদান যোগ করার জন্য ব্যবহার করা হয়।
Collection<String> collection = Arrays.asList("apple", "banana", "apple"); Bag<String> bag = new HashBag<>(); BagUtils.addAll(bag, collection);BagUtils.isBag():- এটি চেক করে যে একটি অবজেক্ট Bag টাইপের কিনা।
boolean isBag = BagUtils.isBag(bag);BagUtils.getUniqueSet():- এটি Bag থেকে unique উপাদানগুলির একটি Set তৈরি করে।
Set<String> uniqueSet = BagUtils.getUniqueSet(bag);BagUtils.subtract():- এটি দুটি Bag এর মধ্যে পার্থক্য বের করে, অর্থাৎ একটি Bag থেকে অন্য Bag এর উপাদানগুলো বাদ দেয়।
Bag<String> bag1 = new HashBag<>(Arrays.asList("apple", "banana", "apple")); Bag<String> bag2 = new HashBag<>(Arrays.asList("banana")); Bag<String> result = BagUtils.subtract(bag1, bag2);
Bag এবং BagUtils-এর উপকারিতা
- Duplicate Element Tracking: Bag আপনাকে ডুপ্লিকেট উপাদান ট্র্যাক করতে এবং সেগুলি স্টোর করতে সহায়তা করে, যা একটি সাধারণ Set বা List থেকে ভিন্ন।
- Frequency Management: এটি উপাদানগুলির উপস্থিতির সংখ্যা ট্র্যাক করে, যাতে সহজেই নির্ধারণ করা যায় কোন উপাদানটি বেশি সংখ্যক বার উপস্থিত।
- Improved Functionality: BagUtils ক্লাসটি Bag এর সঙ্গে সাধারণ অপারেশনগুলি আরও সহজ করে তোলে, যেমন Bag তৈরি করা, উপাদান যোগ করা বা বাদ দেওয়া, এবং সেটিংস ম্যানিপুলেট করা।
- Efficient Data Manipulation: Bag এবং BagUtils একসাথে ব্যবহৃত হলে, আপনি কার্যকরভাবে ডুপ্লিকেট উপাদান এবং তাদের উপস্থিতি পরিচালনা করতে পারবেন।
Bag এবং BagUtils Apache Commons Collections এর অত্যন্ত কার্যকরী বৈশিষ্ট্যগুলির মধ্যে একটি। Bag ডুপ্লিকেট উপাদান ধারণ এবং তাদের উপস্থিতির সংখ্যা ট্র্যাক করতে সহায়তা করে, এবং BagUtils সহজেই Bag-এর সাথে কাজ করার জন্য ইউটিলিটি মেথড সরবরাহ করে। এটি বিশেষভাবে উপকারী যখন আপনাকে ডেটার বিভিন্ন সংস্করণের ট্র্যাকিং বা একাধিক মান একত্রে সংরক্ষণ করতে হয়। Java ডেভেলপারদের জন্য এটি একটি শক্তিশালী টুল, যা তাদের কাজের গতি এবং কার্যকারিতা বৃদ্ধি করতে সহায়তা করে।
Read more